import useRequest from "./request";
import store from "@/store";

import { setSignFun } from "./setupproject/API_SIGN";

import commonConfigs from "./setupproject/BASE_CONFIG";

import { setAuthPhoneUsers, authPhoneSetFun, authUserInfoSetFun } from '@/setupproject/TOOLS_FUN';

const {
	get,
	post,
	request,
	difineBaseConfig,
	defineInterceptors,
} = useRequest()

const setUpObj = {
	url: commonConfigs.domainLink,
	header: {
		'content-type': "application/json",
	},
}

// 定义全局配置
difineBaseConfig(setUpObj)

// 定义拦截器
defineInterceptors({
	request(params) {
		// 请求接口时默认显示Loading遮罩层
		if (store.getters.commonAllowShowLoadings) {
			uni.showLoading({
				mask: true
			});
		}

		// 不在白名单内的请求，当没有token时报错中断执行
		if (!commonConfigs.BAINAMELIST.includes(params.url)) {
			if (!store.getters.token) {
				return console.error('还没获取到token')
			}
		}

		// 请求头携带token
		if(store.getters.token) {
			params.header.Authorization = 'Bearer ' + store.getters.token;
		}else{
			params.header.Authorization = '';
		}
		
		return setSignFun(params)
	},
	responseSuccess(result) {
		console.log("responseSuccess:", result)
		uni.hideLoading();

		// 状态码 200:正常响应
		if (result.statusCode === 200) {
			const {
				code,
				msg
			} = result.data;
			
			// 状态码 10010：微信支付功能暂时无法使用，请下载APP进行操作
			if (code === 10010) {
				store.commit('APP_QRCODE_SET_FUN', true)
				store.commit('WXPAY_TIP_SET_FUN', msg)
				return result.data
			}
			
			// 状态码 30000：token失效
			if (code === 30000) {
				return store.dispatch('RE_LOGIN_GET_FUN');
			}
			
			// 状态码 30002：账号已在其他地方登录 (单一登录)
			if (code === 30002) {
				// #ifdef APP-PLUS
				setAuthPhoneUsers(true, 'onceRelogin');
				// #endif 
				store.commit('ONCE_RELOGIN_SET_FUN', true)
				return result.data
			}
			
			// code:
			// 10002 充值金额不足
			// 200 - 成功，10000 - 失败，70001 -封号，10010 - 微信支付受限
			// 10020 请输入整数/价值不低于0/赏品不存在/超出每日额度等
			if (code !== 200 && code !== 10002 && code !== 70001 && code !== 10020 && code !== 10001) {
				uni.showToast({
					title: msg,
					icon: 'error'
				})
			}

			return result.data;
		} else {
			setTimeout(() => {
				uni.showToast({
					title: 'errCode:' + result.statusCode,
					icon: 'error'
				})
			}, 100)

			return Promise.reject(new Error(result.message || 'Error'))
		}
	},
	responseFali(e) {
		console.log("responseFali:", e)
		uni.showToast({
			title: e.errMsg,
			icon: 'error'
		})
		return e;
	}
})

export {
	get,
	post,
	request,
}